farm_frenzyfandomcom_ru-20200213-history
Модуль:Example
local p = {} -- используется для того, чтобы можно было удалять элементы из таблицы local function copy(other) local res = {} for k,v in pairs(other) do resk = v end return res end -- вызов шаблона, при ошибке возвращает пустую строку local function expand(frame, tname, targs) local success, result = pcall( frame.expandTemplate, frame, {title = tname, args = targs} ) if success then return result else return '' end --return frame:expandTemplate({title = tname, args = args}) end --предотвращает обработку вики-текста в отображении образца local function nowiki(str) local res = str str = mw.text.unstripNoWiki(str) str = string.gsub(str,'%[','str = string.gsub(str,'%',']') str = string.gsub(str,'<','<') str = string.gsub(str,'>','>') str = string.gsub(str,'{','{') str = string.gsub(str,'}','}') str = string.gsub(str,'\'',') return str end --удаляет из параметров вписанные через HTML-сущности "" и заменяет " " на "=" для вызова шаблона local function process_nowiki_equals(str) str = str:gsub(, ):gsub(, ) :gsub(, ):gsub(, '') :gsub(' ', '=') :gsub(' ', '=') :gsub(' ', '=') :gsub(' ', '=') return str end function p.main(frame) if not getArgs then getArgs = require('Module:Arguments').getArgs end local yesno = require('Module:Yesno') local args = copy(getArgs(frame, {trim = false, removeBlanks = false})) --copy(frame.args) local tag = args._tag or 'code' local container = args._container or nil local sep = args._sep and args._sep .. ' ' or '→ ' -- по умолчанию "→" local link = yesno(args._link, false) local endl = args._endl or '' local prefix = args._prefix or args'_pre-text' or '' local postfix = args._postfix or args'_post-text' or '' local comment = args._comment local comment_sep = args._comment_sep or ' ' local nobr = yesno(args._nobr, false) local spaced = yesno(args._spaced, false) local nocat = yesno(args._nocat, false) local style = args._style if style 'pre' then tag = nil container = 'pre' sep = '\n' elseif style '*pre' then tag = nil container = '*pre' sep = '\n' elseif style 'pre↓' then tag = nil container = 'pre' sep = ' ↓ \n' --слегка изменённое содержимое шаблона sp↓ elseif style '*pre↓' then tag = nil container = '*pre' sep = ' ↓ \n' --слегка изменённое содержимое шаблона sp↓ elseif style 'wikitable' then tag = 'tt' sep = '\n|' comment_sep = '\n|' end local nwt = tag and mw.html.create(tag):tag(tag) --"no-wiki tag", внутри него шаблон не вызывается if nwt and nobr then nwt:css('white-space', 'nowrap') end local content = nowiki(prefix) .. ' ') equals_pos-2 then equals_pos = nil end if equals_pos then param = v:sub(1, equals_pos-1) value = v:sub(equals_pos+1) targsparam = process_nowiki_equals(value) content = content .. (spaced and i 1 and ' ' or '') .. '|' .. nowiki(param) .. '=' .. nowiki(value) .. (spaced and ' ' or '') .. endl left_shift = left_shift+1 --переменная нужна, чтобы квазинумерованные параметры, переданные через " ", --не сбивали порядок else targs- left_shift = process_nowiki_equals(v) content = content .. '|' .. nowiki(v) .. endl end elseif not k:find('^_') then --именованные параметры, исключая модификаторы внешнего вида if spaced then i = i+1 end targsk = process_nowiki_equals(v) content = content .. (spaced and i 1 and ' ' or '') .. '|' .. k .. '=' .. nowiki(v) .. (spaced and ' ' or '') .. endl end end content = content .. '}}' .. nowiki(postfix) if container then local container_args = {} container_args1 = content nwt = expand(frame, container, container_args) else nwt:wikitext(content):done() end if nocat then targs'nocat' = 1 end expand_result = tostring(expand(frame, tname, targs)) if expand_result:sub(1, 2) '{|' then sep = sep .. '\n' end return tostring(nwt) .. ' ' .. sep .. prefix .. expand_result .. postfix .. (comment and comment_sep .. comment or '') end return p